package com.denlaku.longan.repository;

import com.denlaku.longan.anno.VarOp;
import com.denlaku.longan.dao.ComponentDao;
import com.denlaku.longan.qo.Query;
import com.denlaku.longan.vo.Component;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author tianx
 */
@Repository
public class ComponentRepository {
    @Autowired
    private ComponentDao componentDao;

    /**
     * 保存组件
     * @param component 组件信息
     * @return 保存数据行数
     */
    @VarOp
    public Integer add(Component component) {
        return componentDao.add(component);
    }

    /**
     * 批量保存组件
     *
     * @param componentList 组件列表
     */
    public void batchAdd(List<Component> componentList) {
        List<List<Component>> partition = ListUtils.partition(ListUtils.emptyIfNull(componentList), 100);
        for (List<Component> components : partition) {
            componentDao.batchAdd(components);
        }
    }

    /**
     * 删除组件
     * 删除组件
     * @param tenantId 租户ID
     * @param dashboardId 仪表板ID
     */
    public void delete(Long tenantId, Long dashboardId) {
        componentDao.delete(tenantId, dashboardId);
    }

    /**
     * 根据ID获取组件
     * @param query 查询参数
     * @return 组件
     */
    public Component get(Query query) {
        return componentDao.get(query);
    }

    /**
     * 根据仪表板ID查询组件列表
     * @param tenantId 租户ID
     * @param dashboardId 仪表板ID
     * @return 组件列表
     */
    public List<Component> list(Long tenantId, Long dashboardId) {
        return componentDao.list(tenantId, dashboardId);
    }

    /**
     * 根据仪表板ID查询组件ID列表
     * @param tenantId 租户ID
     * @param dashboardId 仪表板ID
     * @return 组件ID列表
     */
    public List<Long> listComponentIds(Long tenantId, Long dashboardId) {
        return componentDao.listComponentIds(tenantId, dashboardId);
    }

}
